package io.fft.flight.common.channel.jlx.model;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;

/**
 * @Author: likailun
 * @Description: 就旅行订单信息返回
 * @Date: create in 2024/7/29 23:24
 */
@Data
public class JlxOrder {
    /**
     * 订单ID
     */
    @JacksonXmlProperty(isAttribute = true)
    private String id;
    /**
     * 订单号
     */
    @JacksonXmlProperty(isAttribute = true)
    private String orderNo;
    /**
     * 订单金额
     */
    @JacksonXmlProperty(isAttribute = true)
    private BigDecimal allPrice;
    /**
     * 未支付金额
     */
    @JacksonXmlProperty(isAttribute = true)
    private BigDecimal noPay;
    /**
     * 订单来源，self、wap等
     */
    @JacksonXmlProperty(isAttribute = true)
    private String source;
    /**
     * jlxSource来源标识  取值jlx派单
     */
    @JacksonXmlProperty(isAttribute = true)
    private String jlxSource;
    /**
     * 自动退差标识 true自动退差 false或者没传该字段为非字段退差
     */
    @JacksonXmlProperty(isAttribute = true)
    private String refundXcdDiff;
    /**
     * 支付状态（数字），具体见附录支付方式列表
     * 0:未支付
     * 1:支付宝支付
     */
    @JacksonXmlProperty(isAttribute = true)
    private Integer payStatus;
    /**
     * 支付时间
     */
    @JacksonXmlProperty(isAttribute = true)
    private String payTime;
    /**
     * 退改签说明，升级后单程政策展示标准退改签，该字段不展示，但不为空
     */
    @JacksonXmlProperty(isAttribute = true)
    private String backnote;
    /**
     * 政策价格类型 1 特价, 10 标准, 11 特殊
     */
    @JacksonXmlProperty(isAttribute = true)
    private Integer policyPriceType;
    /**
     * 政策编号
     */
    @JacksonXmlProperty(isAttribute = true)
    private String policyFid;
    /**
     * 政策代码
     */
    @JacksonXmlProperty(isAttribute = true)
    private String policyCode;
    /**
     * 值为0或快递价格。（若快递为空，返回行程单价格，否则返回以下邮寄细节内容
     */
    @JacksonXmlProperty(isAttribute = true)
    private BigDecimal xcdPrice;
    /**
     * 固定值，为“行程单”
     */
    @JacksonXmlProperty(isAttribute = true)
    private String xcd;
    /**
     * 收件人
     */
    @JacksonXmlProperty(isAttribute = true)
    private String sjr;
    /**
     * 快递联系人电话
     */
    @JacksonXmlProperty(isAttribute = true)
    private String contactTel;
    /**
     * 收件人地址
     */
    @JacksonXmlProperty(isAttribute = true)
    private String address;
    /**
     * 快递费支付方式，普通/到付
     */
    @JacksonXmlProperty(isAttribute = true)
    private String expType;
    /**
     * 成人票面价
     */
    @JacksonXmlProperty(isAttribute = true)
    private String viewPrice;
    /**
     * 销售价
     */
    @JacksonXmlProperty(isAttribute = true)
    private String price;
    /**
     * 销售价
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JacksonXmlProperty(isAttribute = true)
    private LocalDateTime ticketDeadLine;
    /**
     * 成人PNR
     */
    @JacksonXmlProperty(isAttribute = true)
    private String pnr;
    /**
     * 儿童PNR
     */
    @JacksonXmlProperty(isAttribute = true)
    private String cnpr;
    /**
     * 儿童PNR
     */
    @JacksonXmlProperty(isAttribute = true)
    private BigDecimal childPrice;
    /**
     * 儿童燃油费
     */
    @JacksonXmlProperty(isAttribute = true)
    private BigDecimal childFuelTax;
    /**
     * 婴儿销售价
     */
    @JacksonXmlProperty(isAttribute = true)
    private BigDecimal infantPrice;
    /**
     * 机建费
     */
    @JacksonXmlProperty(isAttribute = true)
    private BigDecimal constructionFee;
    /**
     * 成人燃油费，订单有多个航段，为多航段之和
     */
    @JacksonXmlProperty(isAttribute = true)
    private BigDecimal fuelTax;
    /**
     * 订单状态，取值见附录订单状态列表
     */
    @JacksonXmlProperty(isAttribute = true)
    private Integer status;
    /**
     * 订单联系人电话
     */
    @JacksonXmlProperty(isAttribute = true)
    private String contactMob;
    /**
     * 订单创建时间
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JacksonXmlProperty(isAttribute = true)
    private LocalDateTime createTime;
    /**
     * 订单中是否含有行程单或保单
     */
    @JacksonXmlProperty(isAttribute = true)
    private Integer needPS;
    /**
     * 订单中的大PNR
     */
    @JacksonXmlProperty(isAttribute = true)
    private String bigPnr;


    @JacksonXmlElementWrapper(useWrapping = false)
    @JacksonXmlProperty(localName = "passenger")
    List<JlxPassenger> passenger;

    @JacksonXmlElementWrapper(useWrapping = false)
    @JacksonXmlProperty(localName = "flight")
    List<JlxFlight> flight;

    @JacksonXmlElementWrapper(useWrapping = false)
    @JacksonXmlProperty(localName = "log")
    List<JlxLog> log;


}
